跳到主要内容

QR 分解

阐述

AAm×nm\times n、满列秩的矩阵(nmn\le m),则每一列向量是线性无关的。我们可以找到一个正交基张成同样大小的线性空间,即

{a1=r11q1a2=r12q1+r22q2a3=r13q1+r23q2+r33q3\begin{cases} a_1&=r_{11}q_1\\ a_2&=r_{12}q_1+r_{22}q_2\\ a_3&=r_{13}q_1+r_{23}q_2+r_{33}q_3\\ \cdots \end{cases}

这等价于

(a1,,an)=(q1,,qn)R;A=QR(a_1,\cdots,a_n)=(q_1,\cdots,q_n)R; A=QR

其中 QQm×nm\times n 的正交矩阵,而 RR 是一个 n×nn\times n 的上三角矩阵。

这通常被称为「瘦」QR 分解,而「胖」QR 分解是分解为 m×mm\times m 的正交矩阵和 m×nm\times n 的上三角矩阵。

Householder 正交化

通过不断消去对角线下方的元素来转化为上三角矩阵。每一步中,

  • vi=ai+signe1aai2e1v_i=a_i+\operatorname{sign}{\Re e_1^*a}\|a_i\|_2e_1
  • Fi=12vivi/viF_i=1-2v_iv_i^*/\|v_i\|,它是一个酉矩阵、对合矩阵
  • Qi=diag(Ii1×i1,Fi)Q_i=\operatorname{diag}(I_{i-1\times i-1},F_i)

算法:

在这个过程中,我们一般不需要计算 QQ,只需要存储各个向量就可以。利用这些向量,我们可以模拟 y=Qxy=Qx 的计算

Q=Q1Q2QnQ=Q_1^*Q_2^*\cdots Q_n^*

所以对每个 k=n1k=n\sim 1 计算 yk:m=yk:m2vk(vkyk:m)y_{k:m}=y_{k:m}-2v_k(v_k^*y_{k:m}) 即可。

总的 flops 为 2mn22n3/32mn^2-2n^3/3.

实例

性质

相关内容

参考文献